Prefetch kill and revival in an instruction cache

ABSTRACT

A system comprises a processor including a CPU core, first and second memory caches, and a memory controller subsystem. The memory controller subsystem speculatively determines a hit or miss condition of a virtual address in the first memory cache and speculatively translates the virtual address to a physical address. Associated with the hit or miss condition and the physical address, the memory controller subsystem configures a status to a valid state. Responsive to receipt of a first indication from the CPU core that no program instructions associated with the virtual address are needed, the memory controller subsystem reconfigures the status to an invalid state and, responsive to receipt of a second indication from the CPU core that a program instruction associated with the virtual address is needed, the memory controller subsystem reconfigures the status back to a valid state.

CROSS REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No.16/694,751, filed Nov. 25, 2019, which is a continuation of U.S. patentapplication Ser. No. 16/102,931, filed Aug. 14, 2018, now U.S. Pat. No.10,489,305, each of which is incorporated by reference herein in itsentirety. This application also contains subject matter that may berelated to the subject matter of U.S. patent application Ser. No.16/102,862 filed Aug. 14, 2018, which is also incorporated by referenceherein.

BACKGROUND

Some memory systems include a multi-level cache system. Upon receiptfrom a processor core by a memory controller of a request for aparticular memory address, the memory controller determines if dataassociated with the memory address is present in a first level cache(L1), If the data is present in the L1 cache, the data is returned fromthe L1 cache. If the data associated with the memory address is notpresent in the L1 cache, then the memory controller accesses a secondlevel cache (L2) which may be larger and thus hold more data than the L1cache. If the data is present in the L2 cache, the data is returned fromthe L2 cache to the processor core and a copy also is stored in the L1cache in the event that the same data is again requested. Additionalmemory levels of the hierarchy are possible as well.

SUMMARY

In one example, a system comprises a processor including a CPU core,first and second memory caches, and a memory controller subsystem. Thememory controller subsystem speculatively determines a hit or misscondition of a virtual address in the first memory cache andspeculatively translates the virtual address to a physical address.Associated with the hit or miss condition and the physical address, thememory controller subsystem configures a status to a valid state.Responsive to receipt of a first indication from the CPU core that noprogram instructions associated with the virtual address are needed, thememory controller subsystem reconfigures the status to an invalid stateand, responsive to receipt of a second indication from the CPU core thata program instruction associated with the first virtual address isneeded, the memory controller subsystem reconfigures the status back toa valid state without an additional access to a TAGRAM or addresstranslation logic.

BRIEF DESCRIPTION OF THE DRAWINGS

For a detailed description of various examples, reference will now bemade to the accompanying drawings in which:

FIG. 1 illustrates a processor in accordance with an example.

FIG. 2 illustrates the promotion of an L1 memory cache access to a fullL2 cache line access in accordance with an example.

FIG. 3 is a flow chart to illustrate a performance improvement inaccordance with an example.

FIG. 4 is another flow chart to illustrate another performanceimprovement in accordance with an example.

FIG. 5 shows a system that includes the processor of FIG. 1.

DETAILED DESCRIPTION

FIG. 1 shows an example of a processor 100 that includes a hierarchicalcache subsystem. The processor 100 in this example includes a centralprocessing unit (CPU) core 102, a memory controller subsystem 101, an L1data cache (L1D) 115, an L1 program cache (L1P) 130, and an L2 memorycache 155. In this example, the memory controller subsystem 101 includesa data memory controller (DMC) 110, a program memory controller (PMC)120, and a unified memory controller (UMC) 150. In this example, at theL1 cache level, data and program instructions are divided into separatecaches. Instructions to be executed by the CPU core 102 are stored inthe L1P 130 to then be provided to the CPU core 102 for execution. Data,on the other hand, is stored in the L1D 115. The CPU core 102 can readdata from, or write data to, the L1D 115 but has read access to (nowrite access to) the L1P 130. The L2 memory cache 155 can store bothdata and program instructions.

Although the sizes of the L1D 115, L1P 130, and L2 memory cache 155 canvary from implementation to implementation, in one example, the size ofthe L2 memory cache 155 is larger than the size of either the L1D 115 orthe L1P 130. For example, the size of the L1D 115 is 32 kbytes and thesize of the L1P also is 32 kbytes, while the size of the L2 memory cachecan between 64 kbytes and 4 MB. Further, the cache line size of the L1D115 is the same as the cache line size of the L2 memory cache 155 (e.g.,128 bytes), and the cache line size of the L1P 130 is smaller (e.g., 64bytes).

Upon the need by the CPU core 102 for data, the DMC 110 receives anaccess request for the target data from the CPU core 102. The accessrequest may comprise an address (e.g., a virtual address) from the CPUcore 102. The DMC 110 determines whether the target data is present inthe L1D 115. If the data is present in the L1D 115, the data is returnedto the CPU core 102. If, however, the data requested by the CPU core 102is not present in the L1D 115, the DMC 110 provides an access request tothe UMC 150. The access request may comprise a physical address that isgenerated by the DMC 110 based on the virtual address (VA) provided bythe CPU core 102. The UMC 150 determines whether the physical addressprovided by the DMC 110 is present in the L2 memory cache 155. If thedata is present in the L2 memory cache 155, the data is returned to theCPU core 102 from the L2 memory cache 155 with a copy being stored inthe L1D 115. An additional hierarchy of the cache subsystem may bepresent as well. For example, an L3 memory cache or system memory may beavailable to be accessed. As such, if the data requested by the CPU core102 is not present in either the L1D 115 or the L2 memory cache 155, thedata can be accessed in an additional cache level.

With regard to program instructions, when the CPU core 102 needsadditional instructions to execute, the CPU core 102 provides a VA 103to the PMC 120. The PMC responds to the VA 103 provided by the CPU core102 by initiating a work flow to return a prefetch packet 105 of programinstructions back to the CPU core 102 for execution. Although the sizeof the prefetch packet can vary from implementation to implementation,in one example, the size of the prefetch packet equals the size of thecache line of the L1P 130. If the L1P cache line size is, for example,64 bytes, a prefetch packet returned to the CPU core 102 will alsocontain 64 bytes of program instructions.

The CPU core 102 also provides a prefetch count 104 to the PMC 120. Insome implementations, the prefetch count 104 is provided to the PMC 120after the CPU core 102 provides the VA 103. The prefetch count 104indicates the number of prefetch units of program instructions followingthe prefetch unit starting at the VA 103. For example, the CPU core 102may provide a VA of 200 h. That VA is associated with a prefetch unit of64 bytes that begins at virtual address 200 h. If the CPU core 102 wantsthe memory controller subsystem 101 to send additional instructions forexecution following the prefetch unit associated with virtual address200 h, the CPU core 102 submits a prefetch count with a value greaterthan 0. A prefetch count of 0 means that the CPU core 102 does not needany more prefetch units. A prefetch count of, for example, 6 means thatthe CPU core 102 requests an additional 6 prefetch units worth ofinstructions to be obtained and sent back to the CPU core 102 forexecution. The return prefetch units are shown in FIG. 1 as prefetchpackets 105.

Referring still to the example of FIG. 1, the PMC 120 includes a TAGRAM121, an address translator 122, and a register 123. The TAGRAM 121includes a list of the virtual addresses whose contents (programinstructions) have been cached to the L1P 130. The address translator122 translates virtual addresses to physical addresses (PAs). In oneexample, the address translator 122 generates the physical addressdirectly from the virtual address. For example, the lower 12 bits of theVA may be used as the least significant 12 bits of the PA, with the mostsignificant bits of the PA (above the lower 12 bits) being generatedbased on a set of tables configured in main memory prior to execution ofthe program. In this example, the L2 memory cache 155 is addressableusing physical addresses, not virtual addresses. The register 123 storesa hit/miss indicator 124 from a TAGRAM 121 look-up, the physical address125 generated by the address translator 122 and a valid bit 126 (alsoreferred to herein as a status bit) to indicate whether thecorresponding hit/miss indicator 124 and physical address 125 are validor invalid.

Upon receipt of a VA 103 from the CPU 102, the PMC 120 performs a TAGRAM121 look-up to determine whether the L1P 130 includes programinstructions associated with that virtual address. The result of theTAGRAM look-up is a hit or miss indicator 124. A hit means that the VAis present in the L1P 130 and a miss means that the VA is not present inthe L1P 130. For an L1P 130 hit, the target prefetch unit is retrievedby the PMC 120 from the L1P 130 and returned as a prefetch packet 105 tothe CPU core 102.

For an L1P 130 miss, the PA (generated based on the VA) is provided bythe PMC 120 to the UMC 150 as shown at 142. A byte count 140 also isprovided from the PMC 120 to the UMC 150. The byte count indicates thenumber of bytes of the L2 memory cache 155 that is to be retrieved (ifpresent) starting at the PA 142. In one example, the byte count 140 is amulti-bit signal that encodes the number of bytes desired from the L2memory cache 155. In an example, the line size of the L2 memory cache is128 bytes, and each line is divided into an upper half (64 bytes) and alower half (64 bytes). The byte count 140 thus may encode the number 64(if only the upper or lower half 64 bytes are needed from a given L2memory cache line) or 128 (if an entire L2 memory cache line is needed).In another example, the byte count may be a single bit signal where onestate (e.g., 1) implicitly encodes an entire L2 memory cache line andanother state (e.g., 0) implicitly encodes half of an L2 memory cacheline.

The UMC 150 also includes a TAGRAM 152. The PA 142 received by the UMC150 from the PMC 120 is used to perform a look-up into the TAGRAM 152 todetermine whether the target PA is a hit or a miss in the L2 memorycache 155. If there is a hit in the L2 memory cache 155, the targetinformation, which may be one-half of the cache line or the entire cacheline depending on the byte count 140, the target information is returnedto the CPU core 102 with a copy being stored in the L1P 130 from whichthe same program instructions will be provided to the CPU core 102 thenext time that the CPU core 102 attempts to fetch the same programinstructions.

In example of FIG. 1, the CPU core 102 provides a VA 103 and a prefetchcount 104 to the PMC 120. The PMC 120 initiates the workflow to retrievethe prefetch packet from the L1P 130 or L2 memory cache 155 as describeabove. Using the prefetch count 104 and the original VA 103, the PMC 120calculates additional virtual addresses and proceeds to retrieveprefetch packets corresponding to those calculated VAs from the L1P 130or L2 memory cache 155. For example, if the prefetch count is 2 and theVA 103 from the CPU core 102 is 200 h, the PMC 120 calculates the nexttwo VAs as 240 h and 280 h, rather than the CPU core 102 providing eachsuch VA to the PMC 120.

FIG. 2 illustrates a specific example in which an optimization resultsin improved performance of the processor 100. As noted above, the linewidth of L2 memory cache 155 is larger than the line width of L1P. Inone example, the width of L1P is 64 bytes and the line width of L2memory cache 155 is 128 bytes as shown in FIG. 2. The L2 memory cache155 is organized as an upper half 220 and a lower half 225. The UMC 150can read an entire 128 byte cache line from the L2 memory cache 155, oronly half (upper half 220 or lower half 225) of an L2 memory cache line.

A given VA may translate into a particular PA that, if present in the L2memory cache 155, maps to the lower half 225 of a given line of the L2memory cache or maps to the upper half 220. Based on the addressingscheme used to represent VAs and PAs, the PMC 120 can determine whethera given VA would map to the lower half 225 or upper half 220. Forexample, a particular bit within the VA (e.g., bit 6) can be used todetermine whether the corresponding PA would map to the upper or lowerhalves of the line of the L2 memory cache. For example, bit 6 being a 0may indicate the lower half and bit 6 being a 1 may indicate the upperhalf.

Reference numeral 202 shows an example of a VA of 200 h provided by theCPU core 102 to the PMC 120 and a corresponding prefetch count of 6.Reference numeral 210 illustrates that the list of VAs that are runthrough the cache pipeline described above include 200 h (received fromthe CPU core 102) and the next 6 consecutive virtual address 240 h, 280h, 2 c 0 h, 300 h, 340 h, and 380 h (calculated by the PMC 120).

Each address from 200 h through 380 h is processed as described above.Any or all of the VAs may be a miss in the L1P 130. The PMC 120 canpackage two consecutive VAs that miss in the L1P 130 into a single L2cache line access attempt. That is, if 200 h and 240 h both miss in theL1P 130, and the physical address corresponding to 200 h corresponds tothe lower half 225 of a particular cache line of the L2 memory cache 155and the physical address corresponding to 240 h corresponds to the upperhalf 225 of the same cache line of the L2 memory cache, the PMC 120 canissue a single PA 142 to the UMC 150 along with a byte count 140specifying an entire cache line from the L2 memory cache. That is, twocontiguous VA misses in L1P 130 can be promoted into a single full lineL2 memory cache look-up.

If the last VA in a series of VAs initiated by the CPU core 102 (e.g.,VA 380 h in VA series 210) maps to the lower half 225 of a cache line ofthe L2 memory cache 155, then in accordance with the described examples,the entire cache line of the L2 memory cache 155 is retrieved eventhough only the lower half 225 was needed. The same response occurs ifthe CPU provided a VA 103 to the PMC 120 with prefetch count of 0meaning that the CPU 102 only wanted a single prefetch unit. Very littleif any additional overhead, time, or power consumption is expended toretrieve the entire cache line and provide the entire cache line to theL1P 130. Since program instructions are often executed in linear order,the probability is generally high that the program instructions in theupper half 220 would be executed following the execution of theinstructions in the lower half 225 anyway. Thus, the next set ofinstructions are received at very little cost and such instructions arelikely to be needed anyway.

FIG. 2 illustrates through arrow 213 that VA 380 h maps to the lowerhalf 225 of cache line 260 in the L2 memory cache 155. The PMC 120determines this mapping through an examination, for example, of one ormore of the bits of the VA or its counterpart physical address followingtranslation by the address translator 122. The PMC 120 promotes thelook-up process by the UMC 150 to a full cache line read by submittingthe PA associated with VA 380 h along with a byte count 104 thatspecifies the entire cache line. The entire 128 byte cache line (ifpresent in the L2 memory cache 155) is then retrieved and written to theL1P 130 in two separate 64 byte cache lines as indicated at 265.

If, however, the last VA in the series of VAs (or if there is only oneVA for a prefetch count of 0) maps to the upper half 220 of a cache lineof the L2 memory cache 155, then the PMC 120 requests the UMC 150 tolook-up in its TAGRAM 152 and return to the CPU core 102 and the L1P 130only the upper half of the cache line. The next PA would be in the lowerhalf 225 of the next cache line of the L2 memory cache 155 andadditional time, overhead and power would be consumed to speculativelyretrieve the next cache line, and it is not certain that the CPU core102 would need to execute those instructions.

FIG. 3 shows an example of a flow chart 300 for the above-describedmethod. The operations can be performed in the order shown, or in adifferent order. Further, the operations can be performed sequentiallyor two or more of the operations can be performed concurrently.

At 302, the method includes receiving by the memory controller subsystem101 an access request for N prefetch units of program instructions. Inone implementation, this operation is performed by the CPU core 102providing an address and count value to the PMC 120. The address may bea virtual address or a physical address, and the count value mayindicate the number of additional prefetch units that are needed by theCPU core 102.

At 304, an index value I is initialized to a value 1. This index valueis used to determine when the last virtual address in a series ofconsecutive virtual addresses is to be processed by the PMC 120. At 306,the method determines whether prefetch unit I is a hit or a miss intothe L1P 130. This determination is made in some examples by determiningif the virtual address is present in the PMC's TAGRAM 121. Two resultsare possible from the determination 306—a hit or a miss.

If the virtual address is a hit into the L1P 130, then at 308, thecorresponding line of the L1P 130 which contains the desired prefetchunit is returned from the L1P 130 and provided back to the CPU core 102as a prefetch packet 105. The index is then incremented at 310 (I=I+1).If I has not yet reached N+1 (as determined at decision operation 312),then the VA of the last of the prefetch units has not yet been evaluatedfor the hit/miss determination, and control loops back to 306 toevaluate the next Ith prefetch unit for a hit or miss in the L1P 130. IfI has reached N+1, then all N prefetch units have been evaluated and thecorresponding program instructions have been supplied to the CPU core102 and the process stops.

For a given Ith prefetch unit, if PMC 120 determines there to be a missin the L1P 130 at 306, then a determination is made at 314 as to whetherI has reached the value of N. If I does not equal N (indicating that thelast VA in a series of VAs has not been reached), then at 316, themethod includes the memory controller subsystem 101 obtaining programinstructions from the L2 memory cache 155 (if present there, or from athird level cache or system memory if not present). The index value I isthen incremented at 318 and control loops back to determination 306.

If, at 314, I has reached N (indicating that the last VA in the seriesof VAs has been reached), then at 320 the method includes determiningwhether the VA of the Ith prefetch unit maps to the lower half or theupper half of the cache line of the L2 memory cache 155. An example ofhow this determination can be made is described above. If the VA of theIth prefetch unit maps to the upper half, then at 322 the methodincludes obtaining the program instructions from only the upper half ofthe cache line of the L2 memory cache.

However, if the VA of Ith prefetch unit maps to the lower half, then at324 the method includes promoting the L2 memory cache access to a fullcache line access and, at 326, obtaining the program instructions fromthe full cache line of the L2 memory cache.

Referring back to FIG. 1, as described above, following submission fromthe CPU core 102 to the PMC 120 of a VA 103, the CPU core 102 also canprovide a prefetch count 104 to the PMC 120. The prefetch count could be0 meaning that the CPU core 102 does not need any more instructionsother than those contained in the prefetch unit starting at the VA 103.However, in between receipt of the VA 103 and the subsequent prefetchcount, the PMC 120 has done some work as described below.

Upon receipt of the VA 103, the PMC 120 performs a look-up in TAGRAM 121to determine whether the first VA (provided by the CPU core 102) is ahit or miss in L1P and also performs a VA to PA conversion using theaddress translator 122. The PMC 120 also calculates a second VA (thenext contiguous VA following the VA provided by the CPU core) beforereceiving the prefetch count 104. The PMC 120 speculatively accesses theTAGRAM 121 and uses the address translator 122 to determine the hit/missstatus of the second VA, and populates register 123 with the hit/missindication 124 and the PA 125. The valid bit 126 in the register 123 isset to a valid state to thereby permit further processing of the secondVA as described above (e.g., retrieve the corresponding cache line fromthe L1P 130 if present, or from the L2 memory cache 155 if needed).

However, before any further processing of the second VA occurs, it ispossible that the CPU core 102 sends a prefetch count of 0 to the PMC120 meaning that the CPU core does not need any prefetch units besidesthe prefetch unit starting at the original VA 103. At this point, thePMC 120 is provided a prefetch count of 0, and thus the prefetch unitassociated with the second VA is not needed. However, the PMC alsoalready determined the hit/miss status of the second VA and hasgenerated the corresponding PA. Both the hit/miss indicator 124 and thePA 125 have been stored in the register 123 by the time the zeroprefetch count has been received by the PMC 120. The PMC 120 changes thestatus of the valid bit 126 to indicate an invalid state to therebypreclude any further processing of the second VA. This condition (validbit set to an invalid state) is referred to as a “kill”, that is, thePMC 120 kills the processing of the second VA.

In some situations, however, the CPU core 102 may determine, despite theprevious kill, that the prefetch unit associated with the second VAshould indeed be obtained from the L1P 130 or L2 memory cache 155 asdescribed above. For example, if the CPU core 102 has no furtherinternal prediction information to inform the next required instructionaddress, the CPU core 102 will signal to the PMC 120 that it shouldcontinue prefetching linearly starting from the last requested address.This condition may occur, for example, due to a misprediction in thebranch prediction logic in the CPU core 102. The CPU core 102 thusissues a revive signal 106 to the PMC 120 for this purpose. The PMC 120responds to the revive signal by changing the valid bit 126 back to thevalid state to thereby permit the continued processing of the second VAthrough the memory subsystem pipeline as described above. As such, theCPU 102 need not submit the second VA directly to the PMC 120. Instead,the PMC 120 retains the second VA in, for example, register 123 as wellas its hit/miss indicator 124 thereby avoiding the power consumption andtime spent to again determine the hit/miss status of the second VA andtranslate the second VA to a PA.

FIG. 4 shows an example of a flow chart 400 for initiating, thenkilling, and then reviving a memory address look-up. The operations canbe performed in the order shown, or in a different order. Further, theoperations can be performed sequentially or two or more of theoperations can be performed concurrently.

At 402, the method includes receiving by the memory controller subsystem101 an access request at a first VA. In one implementation, thisoperation is performed by the CPU core 102 providing the first VA to thePMC 120. At 404, the method includes determining if the first VA is ahit or a miss in the L1P 30. In one example, this operation is performedby accessing the PMC's TAGRAM 121 to determine the hit/miss condition ofthe first VA. The first VA is translated to a first PA at 406 by using,for example, the address translator 122.

At 408, the method includes computing a second VA based on the first VA.The second VA may be computed by incrementing the first VA by a value togenerate an address of a byte that is 64 bytes following the byteassociated with the first VA. At 410, the method includes determining ifthe second VA is a hit or a miss in the L1P 130. In one example, thisoperation is performed by accessing the PMC's TAGRAM 121 to determinethe hit/miss condition of the second VA. The second VA is translated toa second PA at 412 by using the address translator 122 as describedabove. At 414, the method includes updating a register (e.g., register123) with the hit/miss indicator 124 and the second PA. Further, thevalid bit 126 is configured to be a valid state.

The PMC 120 then receives a prefetch count at 416. Then, at 418, if theprefetch count is greater than zero, then at 420, the programinstructions from the L1P 130 or the L2 memory cache 155 (or additionallevel(s)) are retrieved as described above. However, if the prefetchcount is zero, then at 422, the valid bit 126 is changed to the invalidstate. Despite having provided a prefetch count of zero to the PMC 120,the CPU core 102 may then provide a revival indication to the PMC 120(424). At 426, the PMC 120 changes the valid bit 126 back to the validstate and memory controller subsystem 101 then obtains the programinstructions associated with the second PA from the L1P, L2 memorycaches, etc. as appropriate (428).

FIG. 5 shows an example use of the processor 100 described herein. Inthis example, the processor 100 is part of a system-on-chip (SoC) 500that includes the processor 100 and one or more peripheral ports ordevices. In this example, the peripherals include a universalasynchronous receiver transmitter (UART) 502, a universal serial bus(USB) port 504, and an Ethernet controller 506. The SoC 500 can performany of a variety of functions as implemented by, for example, theprogram instructions executed by the processor 100. More than oneprocessor 100 may be provided and, within a given processor 100, morethan one CPU core 102 may be included.

In this description, the term “couple” or “couples” means either anindirect or direct wired or wireless connection. Thus, if a first devicecouples to a second device, that connection may be through a directconnection or through an indirect connection via other devices andconnections. The recitation “based on” means “based at least in parton.” Therefore, if X is based on Y, X may be a function of Y and anynumber of other factors.

Modifications are possible in the described embodiments, and otherembodiments are possible, within the scope of the claims.

What is claimed is:
 1. A device comprising: a processor; a memoryconfigured to store a set of instructions; a memory controller coupledbetween the processor and the memory and configured to: receive anindication of a first address from the processor; perform addresstranslation on the first address to determine a second address; retrievea first subset of the set of instructions from the memory, wherein thefirst subset is associated with the second address; provide the firstsubset of the set of instructions to the processor; determine a thirdaddress based on the first address; perform address translation on thethird address to determine a fourth address; receive a count associatedwith the first address from the processor; and determine whether toretrieve a second subset of the set of instructions from the memorybased on the count, wherein the second subset is associated with thefourth address.
 2. The device of claim 1, wherein: the memory controllerincludes a register; and the memory controller is configured to: storethe fourth address and an indicator that the fourth address is valid inthe register; and determine whether to retrieve the second subset fromthe memory by, when the count is zero, changing the indicator in theregister to indicate that the fourth address is not valid.
 3. The deviceof claim 2, wherein the memory controller is configured to determinewhether to retrieve the second subset from the memory by, when a revivalindication is received, changing the indicator in the register toindicate that the fourth address is valid.
 4. The device of claim 3,wherein the processor is configured to provide the revival indicationbased on a branch misprediction.
 5. The device of claim 2, wherein: thememory includes a level one (L1) cache and a level two (L2) cache; andthe memory controller is configured to store, in the register, anindicator of whether the second subset of the set of instructions is inthe L1 cache.
 6. The device of claim 5, wherein: the memory controllerincludes a tag RAM; and the memory controller is configured to determinewhether the second subset of the set of instructions is in the L1 cachebased on the tag RAM.
 7. The device of claim 1, wherein the memorycontroller is configured to retrieve the second subset from the memorywhen the count is greater than zero.
 8. The device of claim 1, wherein:the first address and the third address are virtual addresses; and thesecond address and the fourth address are physical addresses.
 9. Thedevice of claim 1, wherein the memory controller is configured toperform the determining of the third address and the performing of theaddress translation on the third address irrespective of the count. 10.The device of claim 1, wherein the memory controller is configured toreceive the count after the performing of the address translation on thethird address to determine the fourth address.
 11. The device of claim1, wherein the first address and the third address are contiguous.
 12. Amethod comprising: receiving, by a memory controller, an indication of afirst address and a count associated with the first address; performing,by the memory controller, address translation on the first address todetermine a second address; providing, by the memory controller, a firstset of instructions stored at the second address to a processor;determining, by the memory controller, a third address based on thefirst address; performing, by the memory controller, address translationon the third address to determine a fourth address; and determining, bythe memory controller, whether to provide a second set of instructionsstored at the fourth address to the processor based on the count. 13.The method of claim 12 further comprising: storing the fourth addressand an indicator that the fourth address is valid in a register; anddetermining whether to change the indicator in the register to indicatethat the fourth address is not valid based on the count.
 14. The methodof claim 13 further comprising determining whether to change theindicator in the register to indicate that the fourth address is validbased on whether a revival indication is received.
 15. The method ofclaim 14, wherein the revival indication is based on a branchmisprediction.
 16. The method of claim 13 further comprising storing anindicator of whether the second set of instructions is in an L1 cache inthe register.
 17. The method of claim 12, wherein the determining ofwhether to provide the second set of instructions provides the secondset of instructions to the processor when the count is greater thanzero.
 18. The method of claim 12, wherein: the first address and thethird address are virtual addresses; and the second address and thefourth address are physical addresses.
 19. The method of claim 12,wherein the determining of the third address and the performing of theaddress translation on the third address are performed irrespective ofthe count.
 20. The method of claim 12, wherein the count is receivedafter the performing of the address translation on the third address.